package btc.view.action;

import btc.backend.servicios.BloqueAppl;
import btc.backend.servicios.PalletAppl;
import btc.model.Bloque;
import btc.model.Pallet;
import ch.lambdaj.Lambda;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.interceptor.ParameterAware;
import org.hamcrest.core.Is;

import static ch.lambdaj.Lambda.*;

import java.util.*;

/**
 * User: Juan Lagostena
 * Date: 28/11/12
 * Time: 13:31
 */
public class BloqueAction extends ActionSupport implements ParameterAware {

    private Map<String, String[]> params;
    private int palletId;
    private Map<String, Object> resultadosJSON = new HashMap<String, Object>();

    public String details() {
        return SUCCESS;
    }

    public String stats() {
        BloqueAppl appl = new BloqueAppl();
        PalletAppl palletAppl = new PalletAppl();
        Pallet pallet = palletAppl.obtenerPalletPorId(this.getPalletId());
        List<Bloque> bloqueList = appl.obtenerBloquesPorPallet (pallet);
        Set<String> clasificaciones = new HashSet<String>();
        Map<String, Integer> bloquesXClasificacion = new HashMap<String, Integer>();
        for (Bloque bloque : bloqueList) {
            if (!clasificaciones.contains(bloque.getClasificacion())) {
                clasificaciones.add(bloque.getClasificacion());
            }
        }
        for (String clasificacion : clasificaciones) {
            List<Bloque> bloquesClasificados = filter(having(on(Bloque.class).getClasificacion(), Is.is(clasificacion)), bloqueList);
            int cantidad = 0;
            if (bloquesClasificados != null && !bloquesClasificados.isEmpty()) {
                cantidad = bloquesClasificados.size();
            }
            bloquesXClasificacion.put(clasificacion, cantidad);

        }

        this.resultadosJSON.put("bloques", bloquesXClasificacion);
        this.resultadosJSON.put("total", bloqueList.size());
        return SUCCESS;
    }

    public int getPalletId() {
        return palletId;
    }

    public void setPalletId(int palletId) {
        this.palletId = palletId;
    }

    public Map<String, Object> getResultadosJSON() {
        return resultadosJSON;
    }

    public void setResultadosJSON(Map<String, Object> resultadosJSON) {
        this.resultadosJSON = resultadosJSON;
    }

    @Override
    public void setParameters(Map<String, String[]> stringMap) {
        this.params = stringMap;
    }
}
